/*
 * Copyright 2014 JootMir Project
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 * 
 * Support: http://www.jootmir.org
 */
package org.jootmir.client.core;

/**
 * 游戏入口
 * <br>
 * 对于游戏界面而言，左上角为(0,0)
 * <br>
 * 纹理绘制起点为左下
 * 
 * @author ShawRyan
 *
 */
public interface ApplicationListener {
	/** 游戏创建，资源初始化 */
	public void create ();
	/** 
	 * 游戏绘制
	 * <br>
	 * 每一帧画面都会调用
	 * <br>
	 * 在此方法之前程序会自行清理屏幕像素
	 * <br>
	 * 即每一帧画面都需要被绘制，不存在连续几帧画面相同即不绘制的情况
	 * 
	 * 使用{@link Graphics#getCurrentFrame() Graphics}获取当前帧数进行纹理更新
	 * <br>
	 * 可以辅助参考{@link Graphics#getDeltaTime() Graphics}帧间隔时间
	 */
	public void render ();
	/** 游戏结束，释放资源 */
	public void dispose ();
	/** 发起退出请求 */
	public boolean isRequestExit ();
	/** 
	 * 接收窗体关闭事件，当用户点击窗体右上角(标题栏)关闭按钮时触发
	 * <br>返回false表示不允许游戏退出，在方法体里可以进行退出确认等等
	 * <br>XXX 调用线程可能是主线程(一般出现在全屏运行时，造成游戏阻塞)，也可能是非游戏主线程(一般出现在窗口化运行游戏时，不会造成游戏阻塞)
	 */
	public boolean acceptCloseEvent ();
}